using System;
//using Locator.BusinessEntities;
using System.Collections.Generic;
using DataAccess.BusinessEntities;
using Locator.GeoLocation.BusinessEntities;

namespace Locator.PersonalLocations
{
    /// <summary>
    /// 
    /// </summary>
    public interface IPersonalLocationsController : IDisposable
    {
        /// <summary>
        /// Searches for geo coordinates of a postal code.
        /// </summary>
        /// <param name="postalCode">The postal code.</param>
        /// <param name="country">The country.</param>
        /// <returns></returns>
        Location SearchByPostalCode(string postalCode, string country);

        /// <summary>
        /// Searches for geo coordinates of an address.
        /// </summary>
        /// <param name="streetAddress">The street address.</param>
        /// <param name="country">The country.</param>
        /// <param name="province">The province.</param>
        /// <param name="city">The city.</param>
        /// <returns></returns>
        Location SearchByAddress(string streetAddress, string country, string province, string city);

        /// <summary>
        /// Gets the personal locations for the current user.
        /// </summary>
        /// <returns></returns>
        List<PersonalLocation> GetPersonalLocationsForCurrentUser();

        /// <summary>
        /// Gets a personal location for the current user.
        /// </summary>
        /// <param name="ID">The ID.</param>
        /// <returns></returns>
        PersonalLocation GetPersonalLocationForCurrentUser(int ID);

        /// <summary>
        /// Adds a personal location for current user.
        /// </summary>
        /// <param name="description">The description.</param>
        /// <param name="latitude">The latitude.</param>
        /// <param name="longitude">The longitude.</param>
        void AddPersonalLocationForCurrentUser(string description, double latitude, double longitude);

        /// <summary>
        /// Deletes a personal location for current user.
        /// </summary>
        /// <param name="personalLocationId">The personal location id.</param>
        void DeletePersonalLocationForCurrentUser(int personalLocationId);

        void AddPersonalLocations();
    }
}
